package com.wq.httpclientcore.model;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

/**
 * 通用结果返回类，用于封装业务操作的结果信息
 *
 * @param <T> 操作返回的数据类型
 */
@Data
@Schema(name = "Result", description = "通用结果返回类，包含操作是否成功的标志、消息和数据")
public class Result<T> {
    @Schema(description = "操作是否成功的标志", required = true)
    private boolean success;
    @Schema(description = "操作结果的消息，如成功信息或错误信息", required = false)
    private String message;
    @Schema(description = "操作返回的数据", required = false)
    private T data;

    /**
     * 创建一个表示操作成功的结果对象
     *
     * @param data 操作返回的数据
     * @param <T> 数据类型
     * @return 表示成功的 Result 对象
     */
    public static <T> Result<T> success(T data) {
        Result<T> result = new Result<>();
        result.setSuccess(true);
        result.setData(data);
        return result;
    }

    /**
     * 创建一个表示操作失败的结果对象
     *
     * @param message 失败的消息
     * @param <T> 数据类型
     * @return 表示失败的 Result 对象
     */
    public static <T> Result<T> fail(String message) {
        Result<T> result = new Result<>();
        result.setSuccess(false);
        result.setMessage(message);
        return result;
    }
}